home *** CD-ROM | disk | FTP | other *** search
- /*
- Virtual screen support
- */
- #include <alloc.h>
- #include <graphics.h>
- #include <dos.h>
- #include "fdesplot.h"
- #include "fdesmenu.h"
- #define VWIDTH 1504 /* virtual screen dimensions */
- #define VHEIGHT 1200 /* virtual screen dimensions */
-
- long virt_target_size;
-
- int vstop,vsbottom,vsleft,vsright; /* part of virtual screen in display */
-
- void vscreen_view(int top, int bottom, int left, int right)
- {
- vstop = top;
- vsbottom = bottom;
- vsleft = left;
- vsright = right;
- }
- void vscreen_right(int right)
- {
- vsleft += right;
- vsright += right;
- }
- void vscreen_down(int down)
- {
- vstop += down;
- vsbottom += down;
- }
-
- char huge *vscreen;
- void vscreen_close(void)
- {
- farfree((void far *)vscreen);
- }
- int vscreen_open(void)
- {
- vscreen = (char huge *)farmalloc((long)VWIDTH*VHEIGHT/8);
- if (vscreen == NULL)
- {
- putmsg(100,100,"Not Enough Memory Available",RED,WHITE);
- delay(2000);
- clrmsg();
- return(0);
- }
- vscreen_view(0,maxy,0,maxx);
- return(1);
- }
- void vputpixel(int x, int y) /* sets pixel in virtual screen */
- {
- long byteno;
- int bitmap;
- /* debug */
- /* if ((x < vsright) && (x > vsleft) && (y < vsbottom)
- && (y > vstop))
- {
- putpixel(x-vsleft,y-vstop,15);
- }
- */
- if ((x >= VWIDTH) || (y >= VHEIGHT)) return;
- if ((x < 0) || (y < 0)) return;
- byteno = (x/8) + (long)y*(VWIDTH/8);
- /* if (byteno >= ((long)VWIDTH*VHEIGHT/8)) return; */
- bitmap = *(vscreen+byteno);
- bitmap |= (1 << (x&7));
- *(vscreen+byteno) = bitmap;
- }
- int vgetpixel(int x, int y) /* returns nonzero if pixel lit */
- {
- long byteno;
- int bitmap;
- if ((x >= VWIDTH) || (y >= VHEIGHT)) return(0);
- byteno = (x/8) + (long)y*(VWIDTH/8);
- /* if (byteno >= ((long)VWIDTH*VHEIGHT/8)) return(0); */
- bitmap = *(vscreen+byteno);
- return (bitmap & (1 << (x&7)));
- }
- void vscreen_clear(void)
- {
- long i;
- for (i=0; i<((long)VWIDTH*VHEIGHT/8); i++) *(vscreen+i) = 0;
-
- }
-